3ddb79bc-Udq7ol-NX4q9XsYnN7A2Q xen/arch/x86/time.c
3ddb79bccYVzXZJyVaxuv5T42Z1Fsw xen/arch/x86/trampoline.S
3ddb79bcOftONV9h4QCxXOfiT0h91w xen/arch/x86/traps.c
+ 41c0c411tD3C7TpfDMiFTf7BaNd_Dg xen/arch/x86/vmx.c
+ 420951dcf1rSGnCH0AEYN2KjWGLG6A xen/arch/x86/vmx_intercept.c
+ 41c0c411ODt8uEmV-yUxpQLpqimE5Q xen/arch/x86/vmx_io.c
+ 41f97ef5139vN42cOYHfX_Ac8WOOjA xen/arch/x86/vmx_platform.c
+ 41c0c4128URE0dxcO15JME_MuKBPfg xen/arch/x86/vmx_vmcs.c
+ 419cbedeQDg8IrO3izo3o5rQNlo0kQ xen/arch/x86/x86_32/asm-offsets.c
+ 4202391dkvdTZ8GhWXe3Gqf9EOgWXg xen/arch/x86/x86_32/domain_build.c
3e32af9aRnYGl4GMOaDKp7JdfhOGhg xen/arch/x86/x86_32/domain_page.c
- 40f92331jfOlE7MfKwpdkEb1CEf23g xen/arch/x86/x86_32/emulate.c
3ddb79bcecupHj56ZbTa3B0FxDowMg xen/arch/x86/x86_32/entry.S
3ddb79bcHwuCQDjBICDTSis52hWguw xen/arch/x86/x86_32/mm.c
+ 40f92331jfOlE7MfKwpdkEb1CEf23g xen/arch/x86/x86_32/seg_fixup.c
+ 42000d3ckiFc1qxa4AWqsd0t3lxuyw xen/arch/x86/x86_32/traps.c
3ddb79bc4nTpGQOe6_-MbyZzkhlhFQ xen/arch/x86/x86_32/usercopy.c
+4107c15e_NqNYew2EXroXz2mgTAMWQ xen/arch/x86/x86_32/xdb_trap.S
3ddb79bcOMCu9-5mKpjIh5d0qqBDPg xen/arch/x86/x86_32/xen.lds
+ 41bf1717Ty3hwN3E9swdu8QfnvGqww xen/arch/x86/x86_64/asm-offsets.c
+ 4202391dA91ZovYX9d_5zJi9yGvLoQ xen/arch/x86/x86_64/domain_build.c
40e96d3aLDI-nViMuYneD7VKYlZrVg xen/arch/x86/x86_64/entry.S
+ 41bf1717XhPz_dNT5OKSjgmbFuWBuA xen/arch/x86/x86_64/mm.c
+ 42000d3cMb8o1WuFBXC07c8i3lPZBw xen/arch/x86/x86_64/traps.c
40e96d3ahBTZqbTViInnq0lM03vs7A xen/arch/x86/x86_64/usercopy.c
40e96d3akN3Hu_J5Bk-WXD8OGscrYQ xen/arch/x86/x86_64/xen.lds
+4107c15e-VmEcLsE-7JCXZaabI8C7A xen/arch/x86/xdb.c
3ddb79bdff-gj-jFGKjOejeHLqL8Lg xen/common/Makefile
3e397e66AyyD5fYraAySWuwi9uqSXg xen/common/ac_timer.c
- 4022a73c_BbDFd2YJ_NQYVvKX5Oz7w xen/common/debug-linux.c
- 3fa152581E5KhrAtqZef2Sr5NKTz4w xen/common/debug.c
3ddb79bdLX_P6iB7ILiblRLWvebapg xen/common/dom0_ops.c
3e6377e4i0c9GtKN65e99OtRbw3AZw xen/common/dom_mem_ops.c
3ddb79bdYO5D8Av12NHqPeSviav7cg xen/common/domain.c
for_each_domain ( d )
{
- printk("Xen: DOM %u, CPU %d [has=%c] refcnt=%d nr_pages=%d "
- "xenheap_pages=%d\n",
- d->domain, d->processor,
- test_bit(DF_RUNNING, &d->flags) ? 'T':'F',
+ printk("Xen: DOM %u, flags=%lx refcnt=%d nr_pages=%d "
+ "xenheap_pages=%d\n", d->id, d->d_flags,
atomic_read(&d->refcnt), d->tot_pages, d->xenheap_pages);
- if ( d->tot_pages < 10 )
- {
- list_for_each ( ent, &d->page_list )
- {
- page = list_entry(ent, struct pfn_info, list);
- printk("Page %08x: caf=%08x, taf=%08x\n",
- page_to_phys(page), page->u.inuse.count_info,
- page->u.inuse.type_info);
- }
- }
-
- page = virt_to_page(d->shared_info);
- printk("Shared_info@%08x: caf=%08x, taf=%08x\n",
- page_to_phys(page), page->u.inuse.count_info,
- page->u.inuse.type_info);
+ dump_pageframe_info(d);
- printk("Guest: upcall_pend = %02x, upcall_mask = %02x\n",
- d->shared_info->vcpu_data[0].evtchn_upcall_pending,
- d->shared_info->vcpu_data[0].evtchn_upcall_mask);
- printk("Notifying guest...\n");
- send_guest_virq(d, VIRQ_DEBUG);
+ for_each_exec_domain ( d, ed ) {
+ printk("Guest: %p CPU %d [has=%c] flags=%lx "
+ "upcall_pend = %02x, upcall_mask = %02x\n", ed,
+ ed->processor,
+ test_bit(EDF_RUNNING, &ed->ed_flags) ? 'T':'F',
+ ed->ed_flags,
+ ed->vcpu_info->evtchn_upcall_pending,
+ ed->vcpu_info->evtchn_upcall_mask);
+ printk("Notifying guest... %d/%d\n", d->id, ed->eid);
+ printk("port %d/%d stat %d %d %d\n",
+ VIRQ_DEBUG, ed->virq_to_evtchn[VIRQ_DEBUG],
+ test_bit(ed->virq_to_evtchn[VIRQ_DEBUG], &d->shared_info->evtchn_pending[0]),
+ test_bit(ed->virq_to_evtchn[VIRQ_DEBUG], &d->shared_info->evtchn_mask[0]),
+ test_bit(ed->virq_to_evtchn[VIRQ_DEBUG]>>5, &ed->vcpu_info->evtchn_pending_sel));
+ send_guest_virq(ed, VIRQ_DEBUG);
+ }
}
- read_unlock_irqrestore(&tasklist_lock, flags);
+ read_unlock(&domlist_lock);
}
- extern void dump_runq(unsigned char key, void *dev_id,
- struct pt_regs *regs);
- extern void print_sched_histo(unsigned char key, void *dev_id,
- struct pt_regs *regs);
- extern void reset_sched_histo(unsigned char key, void *dev_id,
- struct pt_regs *regs);
+ extern void dump_runq(unsigned char key);
+ extern void print_sched_histo(unsigned char key);
+ extern void reset_sched_histo(unsigned char key);
+ #ifndef NDEBUG
+ extern void audit_domains_key(unsigned char key);
+ #endif
+
#ifdef PERF_COUNTERS
- extern void perfc_printall(unsigned char key, void *dev_id,
- struct pt_regs *regs);
- extern void perfc_reset(unsigned char key, void *dev_id,
- struct pt_regs *regs);
+ extern void perfc_printall(unsigned char key);
+ extern void perfc_reset(unsigned char key);
#endif
+void do_debug_key(unsigned char key, void *dev_id, struct pt_regs *regs)
+{
+ extern void trap_to_xendbg(void);
+ trap_to_xendbg();
+ asm volatile ("nop"); /* Prevent the compiler doing tail call
+ optimisation, as that confuses xendbg a
+ bit. */
+}
+
void initialize_keytable(void)
{
- add_key_handler('d', dump_registers, "dump registers");
- add_key_handler('h', show_handlers, "show this message");
- add_key_handler('l', print_sched_histo, "print sched latency histogram");
- add_key_handler('L', reset_sched_histo, "reset sched latency histogram");
- add_key_handler('q', do_task_queues, "dump task queues + guest state");
- add_key_handler('r', dump_runq, "dump run queues");
- add_key_handler('R', halt_machine, "reboot machine");
+ open_softirq(KEYPRESS_SOFTIRQ, keypress_softirq);
+
+ register_irq_keyhandler(
+ 'd', dump_registers, "dump registers");
+ register_keyhandler(
+ 'h', show_handlers, "show this message");
+ register_keyhandler(
+ 'l', print_sched_histo, "print sched latency histogram");
+ register_keyhandler(
+ 'L', reset_sched_histo, "reset sched latency histogram");
+ register_keyhandler(
+ 'q', do_task_queues, "dump task queues + guest state");
+ register_keyhandler(
+ 'r', dump_runq, "dump run queues");
+ register_irq_keyhandler(
+ 'R', halt_machine, "reboot machine");
+
+ #ifndef NDEBUG
+ register_keyhandler(
+ 'o', audit_domains_key, "audit domains >0 EXPERIMENTAL");
+ #endif
+
#ifdef PERF_COUNTERS
- add_key_handler('p', perfc_printall, "print performance counters");
- add_key_handler('P', perfc_reset, "reset performance counters");
+ register_keyhandler(
+ 'p', perfc_printall, "print performance counters");
+ register_keyhandler(
+ 'P', perfc_reset, "reset performance counters");
#endif
+ add_key_handler('%', do_debug_key, "Trap to xendbg");
}